﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ZYO.Shared.算法
{
    public class Runtime爻
    {
        public int id;
        public class爻 本卦爻;

        public int 月建旺相;//各个爻的月建状态	旺，次旺，相，余气，休囚，月破
        public int 日建状态;//各个爻的日建状态	临日建，生，克，冲，合	
        public bool is空;
        public bool is暗动;
        public bool is有用;

        public Runtime爻(class爻 yao)
        {
            本卦爻 = yao;
        }
    } 
        
    public class 六爻起卦StatusDetails
    {
        private class六爻起卦 Gua6Yao;
        public class六爻起卦 六爻起卦
        {
            get { return this.Gua6Yao; }
            set
            {
                Gua6Yao = value;
                StartCalculation();

            }
        }

        Runtime爻 世爻;
        Runtime爻 应爻;

        Runtime爻 用神;

        List<Runtime爻> 元神s;
        List<Runtime爻> 忌神s;
        List<Runtime爻> 仇神s;

        List<Runtime爻> 动爻s;


        public 六爻起卦StatusDetails()
        {
            元神s = new List<Runtime爻>();
            忌神s = new List<Runtime爻>();
            仇神s = new List<Runtime爻>();

            动爻s = new List<Runtime爻>();

        }
        public 六爻起卦StatusDetails(class六爻起卦 gua6):this()
        {
            this.六爻起卦 = gua6;
        }

        private void StartCalculation()
        {
            //确定各个爻
            世爻 = new Runtime爻(this.六爻起卦.本卦.世爻);
            应爻 = new Runtime爻(this.六爻起卦.本卦.应爻);

            用神 = new Runtime爻(this.六爻起卦.用神);

            foreach (class爻 yao in this.六爻起卦.本卦.爻s)
            {
                if (yao.is动)
                {
                    动爻s.Add(new Runtime爻(yao));
                }

                switch (ZYOEnum.Compair(yao.五行属性, this.用神.本卦爻.五行属性))
                {
                    case ZYOEnum.e五行生克关系.生:
                        元神s.Add(new Runtime爻(yao));
                        break;

                    case ZYOEnum.e五行生克关系.克:
                        忌神s.Add(new Runtime爻(yao));
                        break;

                    case ZYOEnum.e五行生克关系.被克:
                        仇神s.Add(new Runtime爻(yao));
                        break;

                    default:
                        break;

                }
            }
            //各个爻确定完毕

        }        
        				
        // 主	关系	客	应期        			
        		
        //绝处逢生	月建休囚，日建生之			
        //用神持世	世爻	Equal	用神	
        //回头生	爻	被生	爻的化出爻	
        //各个动爻与用神	用神		动爻s	
        //动爻被合住	动爻	相合	爻的化出爻	应在冲化出爻的日子
        //动空化空	动爻		is空	皆应冲空实空之日而有用也

 

        #region 判断函数

        private bool is旺(class地支 dizhi)
        {

            return false;
        }
        private bool is衰(class地支 dizhi)
        {

            return false;
        }
        private bool is动(class地支 dizhi)
        {

            return false;
        }
        private bool is有用(class地支 dizhi)
        {
            //忌神动而克害用神者有五：
            //忌神旺相或遇日月动爻生扶或临日月者一也。
            //忌神动化回头生扶退神者二也。
            //忌神旺动动临空化空三也。
            //忌神长生帝旺与日辰四也。
            //忌神与仇神同动五也。以上之忌神者如斧戟之忌神，诸占大凶	忌神虽动，

            //"元神能生用神者有五：
            //元神旺相或临日月或日月动爻生扶者一也。
            //元神动化回头生及化进神者二也。
            //元神长生帝旺于日辰三也。
            //元神与忌神同动四也。
            //元神旺动临空化空五也。"

            return false;
        }
        private bool is无用(class地支 dizhi)
        {
            //不能克用神者有七：忌神休囚不动，而动休囚被日、月动爻克者一也。忌神静临空破二也。忌神入三墓三也。忌神衰动化退神四也。忌神衰而又绝五也。忌神动化绝化破、化克、化散六也。忌神与元神同动七也。此忌神者乃无力之忌神也，诸占化凶为吉。以上论元神、忌神之有力、无力者，亦要用神有气，倘若用神无根谓之元神有力亦难生，忌神无力何足喜。

            //"元神虽现又有不能生用神者有六：
            //元神休囚，不动或动而休囚又被伤克者一也。元神休囚又逢自空、月破二也。元神休囚动化退神三也。元神衰而又绝四也。元神入三墓五也。元神休囚动而化绝、化克、化破、化散六也。以上元神无力生用神，无用之元神也，虽有如无。"


            return false;
        }

        #endregion


    }
}
